package minio.java.demo;

import io.minio.GetPresignedObjectUrlArgs;
import io.minio.MinioClient;
import io.minio.StatObjectArgs;
import io.minio.UploadObjectArgs;
import io.minio.http.Method;

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.concurrent.TimeUnit;

public class App {
    private static MinioClient minioClient = MinioClient.builder()
                    .endpoint("https://assets.webterren.com/")
                    .credentials("terren", "minio@terren")
                    .build();

    private static String bucketName = "ent-first-call"; // 苏州征信可以固定是这个bucket名字

    private static boolean exist(String filename) {
        try {
            // 1. 检测在minio文件是不是已经存在，如果不存在则以下会抛出异常
            minioClient.statObject(StatObjectArgs.builder()
                    .bucket(bucketName)
                    .object(filename)
                    .build());
            return true;
        } catch (Exception e) {
            
            return false;
        }
    }

    // 检测文件是否存在, 生成下载链接
    private static String getLink(String filename) {
        try {
            // 1. 检测在minio文件是不是已经存在，如果不存在则以下会抛出异常
            minioClient.statObject(StatObjectArgs.builder()
                    .bucket(bucketName)
                    .object(filename)
                    .build());

            // 2. 获取下载链接，有效时间设置为10分钟
            String url = minioClient.getPresignedObjectUrl(
                    GetPresignedObjectUrlArgs.builder()
                            .method(Method.GET)
                            .bucket(bucketName)
                            .object(filename)
                            .expiry(10, TimeUnit.MINUTES)
                            .build());
            return url;
        } catch (Exception e) {
        	e.printStackTrace();
            return "";
        }
    }

    // filename 最终给用户的文件名，用于对象存储
    // tempfile 本地的临时文件名，例如调用tempfile生成的临时文件名
    public static void Upload(String filename, String tempfile) throws Exception {
        if (exist(filename)) {
            System.out.println(filename + " 文件已经存在");
            return;
        }

        minioClient.uploadObject(
                UploadObjectArgs.builder()
                        .bucket(bucketName)
                        .object(filename)
                        .filename(tempfile)
                        .build());

        System.out.println(filename + " 上传成功" + "临时文件:" + tempfile);
    }

    /*public static void main(String[] args) {
        System.out.println(getLink("测试文件1.txt"));
        System.out.println(getLink("不能存在的文件.docx"));
    }*/
    
   
    public static void main(String[] args) throws Exception{
        // 生成本地临时文件，写入一些文件内容
        Path tempFile = Files.createTempFile("ent-file-", "-minio");
        Files.write(tempFile, "Hello World\n".getBytes(StandardCharsets.UTF_8));

        // 上传文件
        Upload("文件1.txt", tempFile.toString());

        // 上传成功，删除本地临时文件
        Files.delete(tempFile);

        // 生成下载链接
        System.out.println(getLink("测试文件1.txt"));
    }
}